//CORRIGIR: USAR MESMA CLASSE Stalker.Mensangem
// USAR O IMPORT!!!!
package shared;

import java.io.IOException;
import java.nio.ByteBuffer;

/**
 *
 * @author pemachado
 * 
 * DICIONÁRIO DO CAMPO cdTransacao:
 * 1 - Status ON para o Servidor de DNS     
 * 2 - Status OFF para o Servidor de DNS
 * 3XX-Status OCUPADO para o Servidor de DNS
 * 4 - Avisa que quer falar com um Nick específico, envia ip do outro cliente na msg
 * 5 - Avisa que parou de falar com um Nick específico
 * 6 - Inicia conversa com o outro Cliente
 * 7 - Mensagem comum de conversação entre os Clientes
 * 8 - Encerra conversa com o Cliente
 */
public class Mensagem {

    private byte cdTransacao; //1
    private int ip;           //4   
    private short porta;      //2  
    private String texto;   //128 ou mais...
    private byte[] buffer;

    public Mensagem()
    {

    }

    public byte getCdTransacao() {
        return cdTransacao;
    }

    public void setCdTransacao(byte cdTransacao) {
        this.cdTransacao = cdTransacao;
    }

    public int getIp() {
        return ip;
    }

    public void setIp(int ip) {
        this.ip = ip;
    }

    public short getPorta() {
        return porta;
    }

    public void setPorta(short porta) {
        this.porta = porta;
    }

    public String getTexto() {
        return texto;
    }

    public void setTexto(String texto) {
        this.texto = texto;
    }

    public byte[] convertToByteBuffer() throws IOException {
        buffer = new byte[7 + texto.length()];
        ByteBuffer buf = ByteBuffer.wrap(buffer);

        buf.put(this.cdTransacao);
        buf.putInt(this.ip);
        buf.putShort(this.porta);
        buf.put(this.texto.getBytes());

        return buffer;
    }

    public void convertToClass(byte[] buffer) throws IOException {
        byte[] temp;
        ByteBuffer buf = ByteBuffer.wrap(buffer);
        buffer = new byte[buffer.length];

        this.cdTransacao = buf.get();
        this.ip = buf.getInt();
        this.porta = buf.getShort();

        temp = new byte[buf.remaining()];
        buf.get(temp);
        this.texto = new String(temp);
    }

    public int ipToInt(final String addr) {
        final String[] addressBytes = addr.split("\\.");
        int ip = 0;

        for (int i = 0; i < 4; i++) {
            ip <<= 8;
            ip |= Integer.parseInt(addressBytes[i]);
        }
        return ip;
    }

    public String intToIp(int i) {
        return ((i >> 24) & 0xFF) + "."
                + ((i >> 16) & 0xFF) + "."
                + ((i >> 8) & 0xFF) + "."
                + (i & 0xFF);
    }
}
